class PedidosController < ApplicationController
  
  before_filter :validar_admin
  before_filter :cargar_pedido, :only => [ :ficha, :editar, :actualizar, :actualizar_usuario, :actualizar_linea, :quitar_linea, :actualizar_transporte, :borrar ]
  
  def listar
    @pedidos = Pedido.find(:all, :order => 'updated_at desc', :conditions => "estado != '#{Pedido::ENCARRITO}'")
  end
  
  def listar_todos
    @pedidos = Pedido.find(:all, :order => 'updated_at desc')
    render :action => 'listar'
  end
  
  def editar
  end
  
  def actualizar_usuario
    @pedido.update_attributes( params[ :pedido ] )

    if @pedido.save
      flash[:info] = 'Pedido actualizado muy bien.'
      redirect_to admin_pedidos_ficha_url( :id => @pedido.id )
    else
      flash[:error] = 'Algún error se ha producido, vuelve a intentarlo.'
      render :action => 'editar'
    end
  end
  
  
  def actualizar_linea
    @libro = Libro.find_by_titulo_sanitizado( params[ :titulo_sanitizado ] )
    cantidad = params[ :linea ][ :cantidad ]
    pedido_linea = @pedido.linea_que_tiene_el_libro( @libro.id )
    pedido_linea.cantidad = cantidad
    pedido_linea.save
    @pedido.save # TODO: no save sino refresh
    
    flash[ :info ] = "Se ha actualizado la cantidad del libro '#{@libro.titulo}'."
    
    redirect_to admin_pedidos_editar_url( :id => @pedido.id )
  end
  
  def quitar_linea
    @libro = Libro.find_by_titulo_sanitizado( params[ :titulo_sanitizado ] )
    if not @pedido.tiene_libro?( @libro.id )
      flash[ :error ] = "El libro no está en al pedido."
    else
      @pedido.quitar_linea( @libro.id )
      @pedido.save  # TODO: no se save lo que busco sino refresh o algo así porque lo que se guarda es la PedidoLinea

      flash[ :info ] = "Libro quitado del pedido."
    end
    
    redirect_to admin_pedidos_editar_url( :id => @pedido.id )
  end
  
  def actualizar_transporte
    @pedido.actualizar_transporte( params[ :pedido ][ 'transporte_id' ] )
    @pedido.save
    
    flash[ :info ] = "Se ha actualizado el tipo de transporte."
    
    redirect_to admin_pedidos_editar_url( :id => @pedido.id )
  end
  
  def borrar    
    if @pedido.destroy
      flash[:info] = 'Pedido borrado muy bien.'
      redirect_to :action => 'listar'
    else
      flash[:error] = 'Algún error se ha producido, vuelve a intentarlo.'
      render :action => 'listar'
    end
  end
  
  def ficha
  end
  
  protected
    def menu_activado
      @menu_activado = 'pedidos'
    end
    
    def cargar_pedido
      @pedido = Pedido.find_by_id( params[ :id ] )
    end
  
end